/**
 * 应用本地数据存储区，用于应用数据的保存和读取
 *
 * @export
 * @class Storage
 * [storage](http://www.html5plus.org/doc/zh_cn/storage.html)
 */
export default class Storage {
  /**
   * 获取应用存储区中保存的键值对的个数
   *
   * @static
   *
   * @memberOf Storage
   */
  static getLength() {
    return plus.storage.getLength();
  }

  /**
   * 通过键(key)检索获取应用存储的值
   *
   * @static
   * @param {any} key
   * @returns
   *
   * @memberOf Storage
   */
  static getItem(key) {
    try {
      const value = plus.storage.getItem(key);
      if (value == null || !value) {
        return false;
      }
      let result = value.indexOf('{') !== -1 ? JSON.parse(value) : value;
      return result;
    } catch (error) {
      const value = window.localStorage.getItem(key);
      if (value == null || !value) {
        return false;
      }
      let result = value.indexOf('{') !== -1 ? JSON.parse(value) : value;
      return result;
    }
  }

  /**
   * 修改或添加键值(key-value)对数据到应用数据存储中
   *
   * @static
   * @param {any} key
   * @param {any} value
   *
   * @memberOf Storage
   */
  static setItem(key, value) {
    value = Object.prototype.toString.call(value) === "[object Object]" ? JSON.stringify(value) : value.toString();
    try {
      plus.storage.setItem(key, value);
    } catch (error) {
      window.localStorage.setItem(key, value);
    }
  }

  /**
   * 通过key值删除键值对存储的数据
   *
   * @static
   * @param {any} key
   *
   * @memberOf Storage
   */
  static removeItem(key) {
    try {
      plus.storage.removeItem(key);
    } catch (error) {
      window.localStorage.removeItem(key);
    }
  }

  /**
   * 清除应用所有的键值对存储数据
   *
   * @static
   *
   * @memberOf Storage
   */
  static clear() {
    try {
      plus.storage.clear();
    } catch (error) {
      window.localStorage.clear();
    }
  }

  /**
   * 获取键值对中指定索引值的key值
   *
   * @static
   * @param {any} index
   * @returns
   *
   * @memberOf Storage
   */
  static key(index) {
    try {
      return plus.storage.key(index);
    } catch (error) {
      return window.localStorage.key(index);
    }
  }
}
